home *** CD-ROM | disk | FTP | other *** search
- S t a c k
- =========
-
- Dokumentation zum Modul Stack
-
- Autor: Michael Frieß [mif]
- Kernerstr. 22a
- 7000 Stuttgart 1
-
-
- Kopierrechte
- ------------
-
- (C) Copyright 1988 by Michael Frieß. Alle Rechte vorbehalten.
-
- Das gesamte Paket (näheres siehe Kapitel "Paket") ist Public Domain.
- Alles (Quelltexte, Dokumentation und Code) kann beliebig
- weitergegeben werden, so lange mein Name und die Bemerkungen über
- Kopierrechte in den einzelnen Dateien unverändert bleiben.
- Es ist nur der nicht-kommerzielle Gebrauch erlaubt, d.h. auch der
- Verkauf ist nicht erlaubt.
- Nicht erlaubt ist die kommerzielle Verwendung des Paketes oder von
- Teilen ohne meine explizite, schriftliche Erlaubnis. Um sie zu
- erhalten, nehmen Sie bitte unter der o.a. Adresse Kontakt mit mir
- auf.
-
-
- Inhaltsverzeichnis
- ------------------
-
- Paket
- Einleitung
- Datentyp "Stack"
- Stack-Operatoren
- Beispiel
- Weitere generische Datentypen
- Literaturverzeichnis
-
-
- Paket
- -----
-
- Das gesamte Paket "Stack" besteht aus folgenden Dateien:
-
- Stack.doc Englische Dokumentation (für alle Nichtdeutschen)
- Stack.dok Diese Dokumentation
- Stack.def Definitionsmodul
- Stack.mod Implementationsmodul
- Stack.sym Symboldatei
- Stack.obj Compilierter Objektcode
- TestOfStack.mod Testprogramm (Quelltext)
- TestOfStack Testprogramm (ausführbar)
-
-
- Einleitung
- ----------
-
- Modula-II bietet einige wenige grundlegende Datenstrukturen und die
- Möglichkeit umfangreichere Strukturen zu konstruieren. Es unterstützt
- auch die Entwicklung generischer Datentypen. Das beste Beispiel hierfür
- ist der Typ "File", der nicht wie in Pascal zum Sprachumfang gehört,
- sondern aus dem Modul "FileSystem" importiert wird. Die auf diesen Typ
- ausführbaren Operationen werden in dem gleichen Modul angeboten.
- Das einzige, was der Kunde dieses Moduls wissen braucht, ist das
- abstrakte Konzept von Files.
- Das Modul "Stack" stellt nun den generischen Datentyp Stapel
- bereit. Sie brauchen nicht mehr jedesmal, wenn sie eine Stapel
- benötigen, Sich mit Zeigern herumschlagen, Sie müssen nur das
- dahinter stehende Konzept kennen.
-
-
- Datentyp "Stack"
- ---------------
-
- Der generische Datentyp "Stack" ist eine einfache LIFO-Liste
- (Last-In-First-Out). Das letzte Element, das auf den Stapel
- gelegt wird, wird als erstes abgearbeitet, wie zum Beispiel
- bei einem Stapel von Tellern.
-
-
- Stack-Operatoren
- ---------------
-
- Im folgenden sind die möglichen Operationen und ihre abstrakte
- Bedeutung aufgeführt. Nähere Einzelheiten können dem
- Definitionsmodul entnommen werden.
-
- o Init
- Initialisiert einen neuen, leeren Stapel für die weitere
- Verwendung.
-
- o Discard
- Löscht einen Stapel und gibt den benötigten Speicherplatz
- zurück.
-
- o Write
- legt ein neues Element auf dem Stapel ab.
-
- o Read
- liefert das oberste Element auf dem Stapel und entfernt es
- vom Stapel.
-
- o Empty
- stellt fest, ob der Stapel leer ist.
-
-
- Beispiel
- --------
-
- Die Verwendung ist denkbar einfach:
-
- 1) Importiere den Typ und die benötigten Operatoren:
-
- FROM Stack IMPORT stack, Init, Read, Write, Empty, Discard;
-
- 2) Definiere den Elementtyp:
- (zum Beispiel:)
-
- TYPE name = ARRAY [1..30] OF CHAR;
-
- 3) Definiere eine Variable für den Stapel und eine Variable, die
- die Daten eines Elementes enthält:
-
- VAR s : stack;
- Name : name;
-
- 4) Initialisiere den Stapel:
-
- Init (s);
-
- (oder mit qualifiziertem Import:)
-
- Stack.Init (s);
-
- 5) Lege das erste Datum auf dem Stapel ab:
-
- Name := "Kant";
- Write (s, Name);
-
- weitere Daten können zum Beispiel durch Einlesen von einem File
- oder durch Benutzereingabe eingefügt werden.
-
- 6) Hole das oberste Element des Stapels:
-
- Read (s);
-
- 7) Hole alle Elemente vom Stapel:
-
- WHILE NOT Empty (s) DO
- Read (s, Name);
- - Display Name -
- END;
-
- 8) Lösche den Stapel nach Gebrauch:
-
- Discard (s);
-
-
- Einfach, oder?
-
-
- Weitere generische Datentypen
- -----------------------------
-
- Ich habe weitere Datentypen entwickelt:
-
- o queue
- eine einfache FIFO-Liste
-
- o list
- eine erweiterte lineare Liste
-
- o AVL-Tree
- Eine nähere Beschreibung kann [1] entnommen werden.
-
- Es gibt aber sicher eine Menge anderer sinnvoller Datentypen:
-
- o pipe
- Es gibt einen Pipe-Handler auf irgendeiner FishDisk.
- Die Realisation eines Pipe-Handlers mit voller Unterstützung
- als generischer Datentyp in Modula-II wäre interessant.
- Der große Vorteil von Pipes ist meiner Meinung nach der
- simultane Gebrauch durch mehrere Prozesse. So können zum
- Beispiel zwei Prozesse Daten liefern, während gleichzeitig
- ein Prozess die Daten ausliest.
- (Ich warte schon sehnsüchtig auf ein Modul, das im Gegensatz
- zum Modul CoRoutines die Möglichkeiten des multitasking-fähigen
- Betriebssystem vom Amiga voll ausnützt.
-
- o BTree
- Eine andere Variante von Bäumen (siehe auch [1]).
-
- o Hash-Table
- Vielleicht ist eine Hash-Tabelle auch ein möglicher generischer
- Datentyp. Ich habe mir darüber noch keine Gedanken gemacht.
-
- Ich freue mich schon auf eine Menge neuer generischer Datentypen.
- Wer seine Module weitergeben möchte, kann eine Diskette an meine
- Adresse oder die eines anderen AMOK-Mitglied schicken. Wir werden
- sie bestimmt in die nächste AMOK-Diskette aufnehmen.
-
- Literaturverzeichnis
- --------------------
-
- [1] N.Wirth "Algorithmen und Datenstrukturen mit Modula-II"
- Teubner, Stuttgart 1986
-